package com.learnyou.server.xingzuo.biz.common;

import com.learnyou.server.xingzuo.dto.paramDTO.wechat.WechatNormalTemplateMsgParamDTO;
import com.learnyou.server.xingzuo.dto.paramDTO.wechat.WechatWxaUrlLinkGenParamDTO;
import com.learnyou.server.xingzuo.dto.paramDTO.wechat.template.NormalTemplateMsgDataDTO;
import com.learnyou.server.xingzuo.dto.paramDTO.wechat.third.WechatThirdAuthTicketDTO;
import com.learnyou.server.xingzuo.dto.paramDTO.wechat.template.AttendanceMsgDataDTO;
import com.learnyou.server.xingzuo.dto.resultDTO.wechat.WechatNormalResultDTO;
import com.learnyou.server.xingzuo.dto.wechat.WechatThirdAuthInfo;
import com.learnyou.server.xingzuo.dto.wechat.WechatThirdAuthorizerResultDTO;

import java.io.UnsupportedEncodingException;

public interface WechatClientBiz {

    /**
     * 获得小程序token
     * @return
     */
    String getToken();


    /**
     * 微信登录（获得openid）
     * @return
     */
    String getOpenId(String code);

    /**
     * 获得手机号
     * @return
     */
    String phoneNumber(String phoneCode);

//    /**
//     * 发送考勤消息通知
//     * @param targetOpenId 目标用户openid
//     * @param attendanceMsgDataDTO 模板消息数据
//     * @return
//     */
//    boolean sendAttendanceMsg(String targetOpenId, AttendanceMsgDataDTO attendanceMsgDataDTO);
//
//    boolean sendCommentMsg(String wxId, AttendanceMsgDataDTO attendanceMsgDataDTO);
//
//    boolean sendCourseRemindMsg(String wxId, AttendanceMsgDataDTO attendanceMsgDataDTO);

    boolean sendNormalTemplateMsg(String appId, String toUser, String templateId, NormalTemplateMsgDataDTO normalTemplateMsgDataDTO);

//    WechatNormalResultDTO sendNormalTemplateMessageWithClient(String token, WechatNormalTemplateMsgParamDTO templateMsgParamDTO);

    /**
     * 根据微信的推送解析解析ticket， 并且缓存下来
     * @param msgSignature
     * @param timestamp
     * @param nonce
     * @param postData
     * @return
     */
    WechatThirdAuthTicketDTO parseTicketFromPush(String msgSignature, String timestamp, String nonce, String postData);

    /**
     * 获得第三方票据- ticket
     * @return
     */
    String getThirdTicket();

    /**
     * 获得第三方token
     * @return
     */
    String getThirdToken();

    /**
     * 获得预授权Code
     * @return
     */
    String getPreAuthCode();

    /**
     * 获取授权信息
     * @param authCode 授权码
     * @return WechatThirdAuthInfo
     */
    WechatThirdAuthInfo getAuthInfo(String authCode);

    /**
     * 获得并更新授权者账号信息
     * @param authInfo authInfo
     * @return
     */
    WechatThirdAuthorizerResultDTO getAuthorizerInfo(WechatThirdAuthInfo authInfo);

    /**
     * 代公众号发起授权 获得用户的openid
     * @param code
     * @param appId
     * @return
     */
    String getThirdUserOpenId(String code, String appId);

    /**
     * 生成小程序链接
     * @param openId
     * @return
     */
    String generateWxaUrlLink(String openId);

    /**
     * 获得授权者token
     * @return
     */
    String getAuthorizerToken(String appId);

    /**
     * 检测公众号行业设置是否合法
     * @param appId 机构公众号appID
     * @return -1:未知 0:设定 1:未设
     */
    int getMPIndustrySettingStatus(String appId);

    /**
     * 检测公众号模板消息是否合法
     * @param appId 机构公众号appID
     * @return -1:未知 0:设定 1:未设
     */
    int getMPTemplateSettingStatus(String appId);

    /**
     * 用户发起的内容是否合法（安全识别）
     * @param openId
     * @param content (如果是url地址，则默认为图片安全检测， 返回结果是异步。)
     * @return 如果 content为url，返回值表示是否接口调用成功
     */
    boolean isContentValid(String openId, String content);

    /**
     * 获得模板ID
     * @param appId 公众号appID
     * @param mpMessageType 模板类型
     * @return
     */
    String getTemplateId(String appId, MPMessageType mpMessageType);
}
